#include<stdio.h>
#include<stdlib.h>
#include <stdlib.h>  
  
int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) {  
    int m = matrixSize;  // 原始矩阵的行数  
    int n = matrixColSize[0];  // 假设所有行都有相同的列数（这是常见的二维矩阵表示方式）  
    int** a = (int**)malloc(sizeof(int*) * n);  // 转置矩阵的行数（即原始矩阵的列数）  
    *returnSize = n;  // 设置返回的行数  
    *returnColumnSizes = (int*)malloc(n * sizeof(int));  // 为每列的元素个数分配内存  
    for (int i = 0; i < n; i++) {  
        (*returnColumnSizes)[i] = m;  // 每列的元素个数（即原始矩阵的行数）  
        a[i] = (int*)malloc(sizeof(int) * m);  // 转置矩阵的每行  
    }  
      
    for (int i = 0; i < m; i++) {  
        for (int j = 0; j < n; j++) {  
            a[j][i] = matrix[i][j];  // 转置操作  
        }  
    }  
      
    return a;  
}

int main2() {  
    int matrix[2][3] = {  
        {1, 2, 3},  
        {4, 5, 6}  
    };  
    int matrixSize = 2; // 矩阵的行数  
    int matrixColSize[2] = {3}; // 矩阵的列数（这里假设所有行都有相同的列数）  
    int* returnColumnSizes = NULL; // 用于存储转置后每列的元素个数  
    int returnSize = 0; // 用于存储转置后矩阵的行数（即原始矩阵的列数）  
  
    int** transposedMatrix = transpose((int**)matrix, matrixSize, matrixColSize, &returnSize, &returnColumnSizes);  
 
    for (int i = 0; i < returnSize; i++) { // 遍历转置后的每一行  
        for (int j = 0; j < matrixSize; j++) { 
            printf("%d ", transposedMatrix[i][j]);  
        }  
        printf("\n");  
    }  
  
   
    return 0;  
}  
  